#include "progressdlg.h"
#include <QProgressDialog>
#include <QFont>

ProgressDlg::ProgressDlg(QWidget *parent)
    : QDialog(parent)
{
    QFont font("ZYSong18030",12);
    setFont(font);
    setWindowTitle(tr("进度条"));
    FileNum = new QLabel;
    FileNum -> setText(tr("文件数目："));
    FileNumLineEdit = new QLineEdit;
    FileNumLineEdit -> setText(tr("100000"));
    ProgressType =new QLabel;
    ProgressType->setText(tr("显示类型："));
    comboBox =new QComboBox;
    comboBox->addItem(tr("progressBar"));
    comboBox->addItem(tr("progressDialog"));
    progressBar =new QProgressBar;
    starBtn =new QPushButton();
    starBtn->setText(tr("开始"));

    mainLayout = new QGridLayout(this);
    mainLayout -> addWidget(FileNum,0,0);
    mainLayout -> addWidget(FileNumLineEdit,0,1);
    mainLayout -> addWidget(ProgressType,1,0);
    mainLayout -> addWidget(comboBox,1,1);
    mainLayout -> addWidget(progressBar,2,0,1,2);
    mainLayout -> addWidget(starBtn,3,1);
    mainLayout -> setMargin(15);
    mainLayout -> setSpacing(10);
    connect(starBtn,SIGNAL(clicked()),this,SLOT(startProgress()));

}
void ProgressDlg::startProgress(){
    bool ok;
    int num = FileNumLineEdit -> text().toInt(&ok); //获取当前需要复制的文件数目，这里对应进度条的总步进值。
    if(comboBox -> currentIndex()==0){  //使用进度条显示
        progressBar -> setRange(0,num);  //设置进度条的步进范围从0到需要复制的文件数目。
        for(int i=1;i<num+1;i++){
            progressBar -> setValue(i); //模拟每一个文件的复制过程，进度条总的步进值为需要复制的文件数目。当复制完一个文件后，步进值增加1。

        }
    }
    else if(comboBox -> currentIndex() == 1){
        //采用对话框显示进度、创建进度对话 框
        QProgressDialog *progressDialog  = new QProgressDialog(this);
        QFont font("ZYSong18030",12);
        progressDialog -> setFont(font);
        progressDialog ->setWindowModality(Qt::WindowModal);  //设置进度对话框采用模态方式进行显示，即显示进度的同时，其他窗口将不响应输入信号。
        progressDialog ->setMinimumDuration(5);  //设置进度对话框出现需等待的时间，此处设定为5秒，默认为4秒。
        progressDialog ->setWindowTitle(tr("Please Wait"));
        progressDialog ->setLabelText(tr("Copying..."));
        progressDialog ->setCancelButtonText(tr("Cancel"));
        progressDialog ->setRange(0,num);    //设置进度对话框的步进范围
        for(int i=1;i<num+1;i++){
            progressDialog ->setValue(i);  //模拟每一个文件的复制过程，进度条总的步进值为需要复制的文件数目。当复制完一个文件后，步进值增加1。
            if(progressDialog ->wasCanceled())  //检测“取消”按钮是否被触发，若触发则退出循环并关闭进度对话框。
                return;
        }
    }
}

ProgressDlg::~ProgressDlg()
{

}
